home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / Foxpro 2.6 {Windows} / SETUP.IN_ / SETUP.bin
Text File  |  1994-03-10  |  49KB  |  1,446 lines

  1. ''***************************************************************************
  2. ''                                        ICONBTN.INC
  3. ''***************************************************************************
  4.  
  5. DECLARE FUNCTION IconBtnWndFn LIB "IconBtn.dll" (arg1%, arg2%, arg3%) AS INTEGER
  6.  
  7. ''***************************************************************************
  8. ''                                        SETUPAPI.INC
  9. ''***************************************************************************
  10.  
  11. GLOBAL hSetup AS INTEGER
  12. GLOBAL fFrameInit AS INTEGER
  13. GLOBAL fInstallInit AS INTEGER
  14.  
  15. CONST SM_CXSCREEN = 0
  16. CONST SM_CYSCREEN = 1
  17.  
  18. CONST WF_80x87    = 1024
  19. CONST WF_CPU186   =  128
  20. CONST WF_CPU286   =    2
  21. CONST WF_CPU386   =    4
  22. CONST WF_CPU486   =    8
  23. CONST WF_STANDARD =   16
  24. CONST WF_ENHANCED =   32
  25.  
  26. CONST MB_OK          = 0
  27. CONST MB_ICONHAND    = 16
  28. CONST MB_TASKMODAL   = 8192
  29.  
  30. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
  31. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  32. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  33. DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
  34. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  35. DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  36. DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  37.  
  38. CONST cmoVital       = 1
  39. CONST cmoCopy        = 2
  40. CONST cmoUndo        = 4
  41. CONST cmoRoot        = 8
  42. CONST cmoDecompress  = 16
  43. CONST cmoTimeStamp   = 32
  44. CONST cmoReadOnly    = 64
  45. CONST cmoBackup      = 128
  46. CONST cmoForce       = 256
  47. CONST cmoRemove      = 512
  48. CONST cmoOverwrite   = 1024
  49. CONST cmoAppend      = 2048
  50. CONST cmoPrepend     = 4096
  51. CONST cmoNone        = 0
  52. CONST cmoAll         = 65535
  53.  
  54. CONST femExists     = 0
  55. CONST femRead       = 1
  56. CONST femWrite      = 2
  57. CONST femReadWrite  = 3
  58.  
  59. CONST ynrcNo         = 0
  60. CONST ynrcYes        = 1
  61. CONST ynrcErr1       = 2
  62. CONST ynrcErr2       = 3
  63. CONST ynrcErr3       = 4
  64. CONST ynrcErr4       = 5
  65. CONST ynrcErr5       = 6
  66. CONST ynrcErr6       = 7
  67. CONST ynrcErr7       = 8
  68. CONST ynrcErr8       = 9
  69. CONST ynrcErr9       = 10
  70.  
  71. CONST grcOkay       = 0
  72. CONST grcNotOkay    = 1
  73. CONST grcUserQuit   = 48
  74.  
  75. CONST cbSymValMax = 512
  76.  
  77. CONST STFERR      = 1024   ''setup system error
  78. CONST STFQUIT     = 1025   ''user quit
  79. CONST STFPROGMAN    = 32766     ''couldn't create Program Manager stuff
  80.  
  81. CONST scmOff      = 0
  82. CONST scmOnIgnore = 1
  83. CONST scmOnFatal  = 2
  84.  
  85. DECLARE FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" (szPath$, szVol$, cbVol%, szDir$, cbDir%, szFile$, cbFile%) AS INTEGER
  86. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  87. DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
  88. DECLARE FUNCTION FSetBeepingMode LIB "mscomstf.dll" (mode%) AS INTEGER
  89. DECLARE FUNCTION HShowWaitCursor LIB "msshlstf.dll" AS INTEGER
  90. DECLARE FUNCTION FRestoreCursor  LIB "msshlstf.dll" (hPrev%) AS INTEGER
  91. DECLARE FUNCTION FOpenLogFile    LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
  92. DECLARE FUNCTION FCloseLogFile   LIB "mscomstf.dll" AS INTEGER
  93. DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
  94. DECLARE FUNCTION CbGetInfSectionKeyField LIB "mscomstf.dll" (szSect$, szKey$, iField%, szBuf$, cbBuf%) AS INTEGER
  95. DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
  96.  
  97. DECLARE FUNCTION PbSaveMemInf  LIB "mscomstf.dll" AS LONG
  98. DECLARE SUB      RestoreMemInf LIB "mscomstf.dll" (pb&)
  99. DECLARE SUB      FreeMemInf    LIB "mscomstf.dll" (pb&)
  100.  
  101. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  102. DECLARE FUNCTION FSetAbout LIB "msshlstf.dll" (szAbout1$, szAbout2$) AS INTEGER
  103. DECLARE FUNCTION FDoDialogExt LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, szHelpDll$, HelpDlg%, szHelpProc$) AS INTEGER
  104. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  105. DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
  106. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  107. DECLARE FUNCTION FRemoveSymbol LIB "mscomstf.dll" (szSym$) AS INTEGER
  108. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  109. DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
  110. DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
  111. DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
  112. DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
  113. DECLARE FUNCTION FSetSymbolToListOfInfKeys LIB "mscomstf.dll" (szSym$, szSect$, fNulls%) AS INTEGER
  114.  
  115. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  116. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  117. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  118.  
  119. DECLARE SUB      ProSetPos LIB "msinsstf.dll" (x%, y%)
  120. DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  121. DECLARE FUNCTION FRemoveDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  122. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  123. DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  124. DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  125. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  126. DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
  127. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  128. DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  129. DECLARE FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  130. DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
  131. DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
  132. DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
  133. DECLARE FUNCTION FStampResource LIB "msinsstf.dll" (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) AS INTEGER
  134. DECLARE FUNCTION FDumpCopyListToFile LIB "msinsstf.dll" (szFile$) AS INTEGER
  135. DECLARE SUB      ResetCopyList LIB "msinsstf.dll"
  136. DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
  137. DECLARE FUNCTION FAddDos5Help LIB "msinsstf.dll" (szProgName$, szProgHelp$, cmo%) AS INTEGER
  138. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  139. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  140. DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
  141. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  142. DECLARE FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  143. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  144. DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
  145. DECLARE FUNCTION FAddToBillboardList LIB "msinsstf.dll" (szDll$, idDlg%, szProc$, lTicks&) AS INTEGER
  146. DECLARE FUNCTION FClearBillboardList LIB "msinsstf.dll" AS INTEGER
  147. DECLARE FUNCTION FSetRestartDir LIB "msinsstf.dll" (szDir$) AS INTEGER
  148. DECLARE FUNCTION FRestartListEmpty LIB "msinsstf.dll" AS INTEGER
  149. DECLARE FUNCTION FExitExecRestart LIB "msinsstf.dll" AS INTEGER
  150. DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  151. DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  152. DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  153. DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
  154. DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  155. DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
  156.  
  157. DECLARE FUNCTION SetTimeValue LIB "msinsstf.dll" (usHours%, usMinutes%, usSeconds%) AS INTEGER
  158. DECLARE SUB ForceRestartOn LIB "msinsstf.dll"
  159.  
  160. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  161. DECLARE SUB SetAbout(szAbout1$, szAbout2$)
  162. DECLARE FUNCTION UIStartDlgExt(szDll$, Dlg%, szDlgProc$, szHelpDll$, HelpDlg%, szHelpProc$) AS STRING
  163. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  164. DECLARE SUB UIPop (n%)
  165. DECLARE SUB UIPopAll
  166. DECLARE SUB SetTitle (sz$)
  167. DECLARE SUB ReadInfFile (szFile$)
  168. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  169. DECLARE SUB RemoveSymbol (szSym$)
  170. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  171. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  172. DECLARE SUB MakeListFromSectionKeys (szSymbol$, szSect$)
  173. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  174. DECLARE SUB AddListItem(szSymbol$, szItem$)
  175. DECLARE SUB ReplaceListItem(szSymbol$, n%, szItem$)
  176.  
  177. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  178. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  179.  
  180. DECLARE FUNCTION ShowWaitCursor AS INTEGER
  181. DECLARE SUB RestoreCursor (hPrev%)
  182.  
  183. DECLARE FUNCTION SetBeepingMode (mode%) AS INTEGER
  184. DECLARE FUNCTION SetSilentMode (mode%) AS INTEGER
  185.  
  186. DECLARE FUNCTION GetSectionKeyDate (szSect$, szKey$) AS STRING
  187. DECLARE FUNCTION GetSectionKeyFilename (szSect$, szKey$) AS STRING
  188. DECLARE FUNCTION GetSectionKeySize (szSect$, szKey$) AS LONG
  189. DECLARE FUNCTION GetSectionKeyVersion (szSect$, szKey$) AS STRING
  190.  
  191. DECLARE SUB MakeListFromSectionDate (szSym$, szSect$)
  192. DECLARE SUB MakeListFromSectionFilename (szSym$, szSect$)
  193. DECLARE SUB MakeListFromSectionSize (szSym$, szSect$)
  194. DECLARE SUB MakeListFromSectionVersion (szSym$, szSect$)
  195.  
  196. DECLARE SUB CreateDir (szDir$, cmo%)
  197. DECLARE SUB RemoveDir (szDir$, cmo%)
  198. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  199. DECLARE SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  200. DECLARE SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  201. DECLARE SUB CopyFilesInCopyList
  202. DECLARE SUB RemoveIniSection (szFile$, szSect$, cmo%)
  203. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  204. DECLARE SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  205. DECLARE SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  206. DECLARE SUB CreateProgmanGroup (szGroup$, szPath$, cmo%)
  207. DECLARE SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  208. DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  209. DECLARE SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%)
  210. DECLARE SUB DumpCopyList (szFile$)
  211. DECLARE SUB ClearCopyList
  212. DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
  213. DECLARE SUB AddDos5Help (szProgName$, szProgHelp$, cmo%)
  214. DECLARE SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  215. DECLARE SUB RemoveFile (szFullPathSrc$, cmo%)
  216. DECLARE SUB BackupFile (szFullPath$, szBackup$)
  217. DECLARE SUB RenameFile (szFullPath$, szBackup$)
  218. DECLARE SUB InitInstall
  219. DECLARE SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&)
  220. DECLARE SUB AddBlankToBillboardList (lTicks&)
  221. DECLARE SUB ClearBillboardList
  222. DECLARE SUB OpenLogFile (szFile$, fAppend%)
  223. DECLARE SUB CloseLogFile
  224. DECLARE SUB WriteToLogFile (szStr$)
  225. DECLARE SUB SetCopyGaugePosition (x%, y%)
  226. DECLARE SUB SetRestartDir(szDir$)
  227. DECLARE FUNCTION RestartListEmpty AS INTEGER
  228. DECLARE FUNCTION ExitExecRestart AS INTEGER
  229. DECLARE FUNCTION FindFileUsingFileOpen (szFile$) AS STRING
  230. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  231. DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
  232. DECLARE FUNCTION GetNthFieldFromIniString (szLine$, iField%) AS STRING
  233. DECLARE SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%)
  234.  
  235. DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
  236. DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
  237. DECLARE FUNCTION GetWindowsMode AS INTEGER
  238. DECLARE FUNCTION GetWindowsDir  AS STRING
  239. DECLARE FUNCTION GetWindowsSysDir AS STRING
  240. DECLARE FUNCTION IsWindowsShared AS INTEGER
  241. DECLARE FUNCTION GetScreenWidth AS INTEGER
  242. DECLARE FUNCTION GetScreenHeight AS INTEGER
  243.  
  244.  
  245. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  246.     fFrameInit = 0
  247.     fInstallInit = 0
  248.  
  249.     IF hSetup > 0 THEN
  250.     END IF
  251.  
  252.     i% = InitFrame(szCmdLine$)
  253.     fFrameInit = 1
  254.  
  255.     InitInstall
  256.     fInstallInit = 1
  257.  
  258.     InitSetup = i%
  259. END FUNCTION
  260.  
  261. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  262.     IF hSetup > 0 THEN
  263.     ELSE
  264.         i% = InitializeFrame(szCmdLine$)
  265.         IF i% = -1 THEN
  266.             END   '' NOT an error - Usage (/?) or Command line copy operation
  267.         ELSEIF i% = 0 THEN
  268.             END
  269.         ELSE
  270.             InitFrame = i%
  271.         END IF
  272.     END IF
  273. END FUNCTION
  274.  
  275. SUB SetBitmap(szDll$, Bitmap%) STATIC
  276.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  277.         ERROR STFERR
  278.     END IF
  279. END SUB
  280.  
  281. SUB SetAbout(szAbout1$, szAbout2$) STATIC
  282.     IF FSetAbout(szAbout1$, szAbout2$) = 0 THEN
  283.         ERROR STFERR
  284.     END IF
  285. END SUB
  286.  
  287. SUB SetTitle(sz$) STATIC
  288.     SetWindowText HwndFrame(), sz$
  289. END SUB
  290.  
  291. SUB ReadInfFile (szFile$) STATIC
  292.     IF FOpenInf(szFile$, 1, 0) = 0 THEN
  293.         ERROR STFERR
  294.     END IF
  295. END SUB
  296.  
  297. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  298.     IF FDoDialogExt(HwndFrame(), szDll$, Dlg%, szDlgProc$, szDll$, HelpDlg%, szHelpProc$) = 0 THEN
  299.         ERROR STFERR
  300.     ELSE
  301.         UIStartDlg = GetSymbolValue("DLGEVENT")
  302.     END IF
  303. END FUNCTION
  304.  
  305.  
  306. FUNCTION UIStartDlgExt(szDll$, Dlg%, szDlgProc$, szHelpDll$, HelpDlg%, szHelpProc$) STATIC AS STRING
  307.     IF FDoDialogExt(HwndFrame(), szDll$, Dlg%, szDlgProc$, szHelpDll$, HelpDlg%, szHelpProc$) = 0 THEN
  308.         ERROR STFERR
  309.     ELSE
  310.         UIStartDlgExt = GetSymbolValue("DLGEVENT")
  311.     END IF
  312. END FUNCTION
  313.  
  314.  
  315. SUB UIPop (n%) STATIC
  316.     IF FKillNDialogs(n%) = 0 THEN
  317.         ERROR STFERR
  318.     END IF
  319. END SUB
  320.  
  321. SUB UIPopAll STATIC
  322.     IF FKillNDialogs(65535) = 0 THEN
  323.         ERROR STFERR
  324.     END IF
  325. END SUB
  326.  
  327.  
  328. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  329.     szValue$ = string$(cbSymValMax,32)
  330.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  331.     GetSymbolValue = szValue$
  332.     IF Length% >= cbSymValMax THEN
  333.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  334.         ERROR STFERR
  335.     END IF
  336.     IF szSymbol$ = "" THEN
  337.         ERROR STFERR
  338.     END IF
  339.     szValue$ = ""
  340. END FUNCTION
  341.  
  342.  
  343. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  344.     GetListLength = UsGetListLength(szSymbol$)
  345.     IF szSymbol$ = "" THEN
  346.         ERROR STFERR
  347.     END IF
  348. END FUNCTION
  349.  
  350.  
  351. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  352.     szListItem$ = string$(cbSymValMax,32)
  353.     Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  354.     GetListItem = szListItem$
  355.     IF Length% >= cbSymValMax THEN
  356.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  357.         ERROR STFERR
  358.     END IF
  359.     IF szListSymbol$ = "" THEN
  360.         ERROR STFERR
  361.     END IF
  362.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  363.         ERROR STFERR
  364.     end if
  365.     szListItem$ = ""
  366. END FUNCTION
  367.  
  368.  
  369. SUB AddListItem(szSymbol$, szItem$) STATIC
  370.     IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  371.         ERROR STFERR
  372.     END IF
  373. END SUB
  374.  
  375.  
  376. SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
  377.     IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
  378.         ERROR STFERR
  379.     END IF
  380. END SUB
  381.  
  382. SUB MakeListFromSectionKeys(szSymbol$, szSect$) STATIC
  383.     IF FSetSymbolToListOfInfKeys(szSymbol$, szSect$, 1) = 0 THEN
  384.         ERROR STFERR
  385.     END IF
  386. END SUB
  387.  
  388.  
  389. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  390.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  391.         ERROR STFERR
  392.     END IF
  393. END SUB
  394.  
  395. SUB RemoveSymbol(szSym$) STATIC
  396.     IF FRemoveSymbol(szSym$) = 0 THEN
  397.         ERROR STFERR
  398.     END IF
  399. END SUB
  400.  
  401. FUNCTION ShowWaitCursor STATIC AS INTEGER
  402.     ShowWaitCursor = HShowWaitCursor
  403. END FUNCTION
  404.  
  405. SUB RestoreCursor (hPrev%) STATIC
  406.     i% = FRestoreCursor(hPrev%)
  407.     IF i% = 0 THEN
  408.         ERROR STFERR
  409.     END IF
  410. END SUB
  411.  
  412. FUNCTION SetBeepingMode (mode%) STATIC AS INTEGER
  413.     SetBeepingMode = FSetBeepingMode(mode%)
  414. END FUNCTION
  415.  
  416. FUNCTION SetSilentMode (mode%) STATIC AS INTEGER
  417.     SetSilentMode = FSetSilent(mode%)
  418. END FUNCTION
  419.  
  420. FUNCTION GetSectionKeyDate (szSect$, szKey$) STATIC AS STRING
  421.     szBuf$ = string$(128, 32)
  422.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 5, szBuf$, 128)
  423.     IF Length% >= 128 THEN
  424.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  425.         ERROR STFERR
  426.     END IF
  427.  
  428.     IF Length% = -1 THEN
  429.         ERROR STFERR
  430.     END IF
  431.  
  432.     GetSectionKeyDate = szBuf$
  433.     szBuf$ = ""
  434. END FUNCTION
  435.  
  436.  
  437. FUNCTION GetSectionKeyFilename (szSect$, szKey$) STATIC AS STRING
  438.     szBuf$ = string$(128, 32)
  439.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 1, szBuf$, 128)
  440.     IF Length% >= 128 THEN
  441.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  442.         ERROR STFERR
  443.     END IF
  444.  
  445.     IF Length% = -1 THEN
  446.         ERROR STFERR
  447.     END IF
  448.  
  449.     GetSectionKeyFilename = szBuf$
  450.     szBuf$ = ""
  451. END FUNCTION
  452.  
  453.  
  454. FUNCTION GetSectionKeySize (szSect$, szKey$) STATIC AS LONG
  455.     szBuf$ = string$(128, 32)
  456.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 15, szBuf$, 128)
  457.     IF Length% >= 128 THEN
  458.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  459.         ERROR STFERR
  460.     END IF
  461.  
  462.     IF Length% = -1 THEN
  463.         ERROR STFERR
  464.     END IF
  465.  
  466.     GetSectionKeySize = VAL(szBuf$)
  467.     szBuf$ = ""
  468. END FUNCTION
  469.  
  470.  
  471. FUNCTION GetSectionKeyVersion (szSect$, szKey$) STATIC AS STRING
  472.     szBuf$ = string$(128, 32)
  473.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 19, szBuf$, 128)
  474.     IF Length% >= 128 THEN
  475.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  476.         ERROR STFERR
  477.     END IF
  478.  
  479.     IF Length% = -1 THEN
  480.         ERROR STFERR
  481.     END IF
  482.  
  483.     GetSectionKeyVersion = szBuf$
  484.     szBuf$ = ""
  485. END FUNCTION
  486.  
  487.  
  488. SUB MakeListFromSectionDate (szSym$, szSect$) STATIC
  489.     IF FMakeListInfSectionField(szSym$, szSect$, 5) = 0 THEN
  490.         ERROR STFERR
  491.     END IF
  492. END SUB
  493.  
  494. SUB MakeListFromSectionFilename (szSym$, szSect$) STATIC
  495.     IF FMakeListInfSectionField(szSym$, szSect$, 1) = 0 THEN
  496.         ERROR STFERR
  497.     END IF
  498. END SUB
  499.  
  500. SUB MakeListFromSectionSize (szSym$, szSect$) STATIC
  501.     IF FMakeListInfSectionField(szSym$, szSect$, 15) = 0 THEN
  502.         ERROR STFERR
  503.     END IF
  504. END SUB
  505.  
  506. SUB MakeListFromSectionVersion (szSym$, szSect$) STATIC
  507.     IF FMakeListInfSectionField(szSym$, szSect$, 19) = 0 THEN
  508.         ERROR STFERR
  509.     END IF
  510. END SUB
  511.  
  512. SUB InitInstall STATIC
  513.     IF hSetup > 0 THEN
  514.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  515.         END
  516.     END IF
  517. END SUB
  518.  
  519. SUB CreateDir (szDir$, cmo%) STATIC
  520.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  521.         ERROR STFERR
  522.     END IF
  523. END SUB
  524.  
  525. SUB RemoveDir (szDir$, cmo%) STATIC
  526.     IF FRemoveDir(szDir$, cmo%) = 0 THEN
  527.         ERROR STFERR
  528.     END IF
  529. END SUB
  530.  
  531. SUB RemoveIniSection (szFile$, szSect$, cmo%) STATIC
  532.     IF FRemoveIniSection(szFile$, szSect$, cmo%) = 0 THEN
  533.         ERROR STFERR
  534.     END IF
  535. END SUB
  536.  
  537. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  538.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  539.         ERROR STFERR
  540.     END IF
  541. END SUB
  542.  
  543. SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) STATIC
  544.     IF FRemoveIniKey(szFile$, szSect$, szKey$, cmo%) = 0 THEN
  545.         ERROR STFERR
  546.     END IF
  547. END SUB
  548.  
  549. SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  550.     IF FCreateSysIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  551.         ERROR STFERR
  552.     END IF
  553. END SUB
  554.  
  555. SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
  556.     IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  557.         ERROR STFPROGMAN
  558.     END IF
  559. END SUB
  560.  
  561. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  562.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  563.         ERROR STFPROGMAN
  564.     END IF
  565. END SUB
  566.  
  567. SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) STATIC
  568.     IF FStampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) = 0 THEN
  569.         ERROR STFERR
  570.     END IF
  571. END SUB
  572.  
  573. SUB DumpCopyList (szFile$) STATIC
  574.     IF FDumpCopyListToFile (szFile$) = 0 THEN
  575.         ERROR STFERR
  576.     END IF
  577. END SUB
  578.  
  579. SUB ClearCopyList STATIC
  580.     ResetCopyList
  581. END SUB
  582.  
  583. FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) STATIC AS LONG
  584.     lNeed& = LcbGetCopyListCost (szExtraList$, szCostList$, szNeedList$)
  585.     IF lNeed& < 0 THEN
  586.         ERROR STFERR
  587.     END IF
  588.     GetCopyListCost = lNeed&
  589. END FUNCTION
  590.  
  591. SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
  592.     szItemNew$ = szItem$
  593.     IF szOther$ <> "" THEN
  594.         szItemNew$ = szItem$ + "," + szOther$
  595.     END IF
  596.  
  597.     IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  598.         ERROR STFPROGMAN
  599.     END IF
  600.     szItemNew$ = ""
  601. END SUB
  602.  
  603. SUB AddDos5Help (szProgName$, szProgHelp$, cmo%) STATIC
  604.     IF FAddDos5Help (szProgName$, szProgHelp$, cmo%) = 0 THEN
  605.         ERROR STFERR
  606.     END IF
  607. END SUB
  608.  
  609. SUB CopyFilesInCopyList STATIC
  610.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  611.  
  612.     IF grc% = grcUserQuit THEN
  613.         ERROR STFQUIT
  614.     ELSEIF grc% > 0 THEN
  615.         ERROR STFERR
  616.     END IF
  617. END SUB
  618.  
  619. SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) STATIC
  620.     IF  FCopyOneFile(szFullPathSrc$, szFullPathDst$, (cmo OR cmoCopy), fAppend%) = 0 THEN
  621.         ERROR STFERR
  622.     END IF
  623. END SUB
  624.  
  625. SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
  626.     IF  YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo THEN
  627.         ERROR STFERR
  628.     END IF
  629. END SUB
  630.  
  631. SUB BackupFile (szFullPath$, szBackup$) STATIC
  632.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  633.         ERROR STFERR
  634.     END IF
  635. END SUB
  636.  
  637. SUB RenameFile (szFullPath$, szBackup$) STATIC
  638.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  639.         ERROR STFERR
  640.     END IF
  641. END SUB
  642.  
  643. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  644.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  645.         ERROR STFERR
  646.     END IF
  647. END SUB
  648.  
  649. SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  650.     IF FAddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  651.         ERROR STFERR
  652.     END IF
  653. END SUB
  654.  
  655. SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  656.     IF FAddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  657.         ERROR STFERR
  658.     END IF
  659. END SUB
  660.  
  661.  
  662. SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&) STATIC
  663.     IF FAddToBillboardList(szDll$, idDlg%, szProc$, lTicks&) = 0 THEN
  664.         ERROR STFERR
  665.     END IF
  666. END SUB
  667.  
  668. SUB AddBlankToBillboardList (lTicks&) STATIC
  669.     IF FAddToBillboardList(NULL, 0, NULL, lTicks&) = 0 THEN
  670.         ERROR STFERR
  671.     END IF
  672. END SUB
  673.  
  674. SUB ClearBillboardList STATIC
  675.     IF FClearBillboardList = 0 THEN
  676.         ERROR STFERR
  677.     END IF
  678. END SUB
  679.  
  680. SUB OpenLogFile (szFile$, fAppend%) STATIC
  681.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  682.         ERROR STFERR
  683.     END IF
  684. END SUB
  685.  
  686. SUB CloseLogFile STATIC
  687.     IF FCloseLogFile() = 0 THEN
  688.         ERROR STFERR
  689.     END IF
  690. END SUB
  691.  
  692. SUB WriteToLogFile (szStr$) STATIC
  693.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  694.         ERROR STFERR
  695.     END IF
  696. END SUB
  697.  
  698. SUB SetCopyGaugePosition (x%, y%) STATIC
  699.     ProSetPos x%, y%
  700. END SUB
  701.  
  702. FUNCTION FindFileUsingFileOpen (szFile$) STATIC AS STRING
  703.     szBuf$ = STRING$(512, 32)
  704.  
  705.     wRet% = WFindFileUsingFileOpen(szFile$, szBuf$, len(szBuf$))
  706.     IF wRet% = 0 THEN
  707.         FindFileUsingFileOpen = szBuf$
  708.     ELSEIF wRet% = 1 THEN
  709.         FindFileUsingFileOpen = ""
  710.     ELSE
  711.         ERROR STFERR
  712.     END IF
  713.  
  714.     szBuf$ = ""
  715. END FUNCTION
  716.  
  717. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  718.     IsDirWritable = FIsDirWritable(szDir$)
  719. END FUNCTION
  720.  
  721. FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
  722.     IsFileWritable = FIsFileWritable(szFile$)
  723. END FUNCTION
  724.  
  725. FUNCTION GetNthFieldFromIniString (szLine$, iField%) STATIC AS STRING
  726.     IF iField% < 1 THEN
  727.         ERROR STFERR
  728.     END IF
  729.     szStart$ = szLine$
  730.     IF iField% <> 1 THEN
  731.         FOR i% = 2 TO iField% STEP 1
  732.             iNew% = INSTR(szStart$, ",")
  733.             IF iNew% = 0 THEN
  734.                 GetNthFieldFromIniString = ""
  735.                 GOTO _GNFFIS_END
  736.             END IF
  737.             szStart$ = MID$(szStart$, (iNew% + 1))
  738.         NEXT
  739.     END IF
  740.  
  741.     iNew% = INSTR(szStart$, ",")
  742.     IF iNew% <> 0 THEN
  743.         szStart$ = MID$(szStart$, 1, (iNew% - 1))
  744.     END IF
  745.  
  746.     GetNthFieldFromIniString = LTRIM$(RTRIM$(szStart$))
  747.  
  748. _GNFFIS_END:
  749.  
  750. END FUNCTION
  751.  
  752. FUNCTION GetWindowsMajorVersion STATIC AS INTEGER
  753.     GetWindowsMajorVersion = GetVersion() MOD 256
  754. END FUNCTION
  755.  
  756. FUNCTION GetWindowsMinorVersion STATIC AS INTEGER
  757.     GetWindowsMinorVersion = GetVersion() / 256
  758. END FUNCTION
  759.  
  760. FUNCTION GetWindowsMode STATIC AS INTEGER
  761.     GetWindowsMode = 0
  762.     longTmp& = GetWinFlags()
  763.     IF longTmp& AND WF_STANDARD THEN
  764.         GetWindowsMode = 1
  765.     ELSEIF longTmp& AND WF_ENHANCED THEN
  766.         GetWindowsMode = 2
  767.     END IF
  768. END FUNCTION
  769.  
  770. FUNCTION GetWindowsDir STATIC AS STRING
  771.     szBuf$ = string$(256, 32)
  772.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  773.  
  774.     IF cbBuf% = 0 THEN
  775.         GetWindowsDir = ""
  776.         ERROR STFERR
  777.     ELSE
  778.         IF cbBuf% > 255 THEN
  779.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  780.             ERROR STFERR
  781.         END IF
  782.         szBuf$ = RTRIM$(szBuf$)
  783.         IF MID$(szBuf$, 1, 1) = "\" THEN
  784.             'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  785.             szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  786.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  787.             szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  788.         END IF
  789.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  790.             szBuf$ = szBuf$ + "\"
  791.         END IF
  792.         GetWindowsDir = szBuf$
  793.     END IF
  794.  
  795.     szBuf$ = ""
  796. END FUNCTION
  797.  
  798. FUNCTION GetWindowsSysDir STATIC AS STRING
  799.     szBuf$ = string$(256, 32)
  800.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  801.  
  802.     IF cbBuf% = 0 THEN
  803.         ERROR STFERR
  804.     ELSE
  805.         IF cbBuf% > 255 THEN
  806.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  807.             ERROR STFERR
  808.         END IF
  809.         szBuf$ = RTRIM$(szBuf$)
  810.         IF MID$(szBuf$, 1, 1) = "\" THEN
  811.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  812.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  813.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  814.         END IF
  815.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  816.             szBuf$ = szBuf$ + "\"
  817.         END IF
  818.         GetWindowsSysDir = szBuf$
  819.     END IF
  820.  
  821.     szBuf$ = ""
  822. END FUNCTION
  823.  
  824. FUNCTION IsWindowsShared STATIC AS INTEGER
  825.     szWin$ = UCASE$(GetWindowsDir())
  826.     szSys$ = UCASE$(GetWindowsSysDir())
  827.  
  828.     IF len(szWin$) = 0 THEN
  829.         ERROR STFERR
  830.     END IF
  831.  
  832.     IF len(szSys$) <= len(szWin$) THEN
  833.         IsWindowsShared = 1
  834.     ELSE
  835.         szSys$ = MID$(szSys$, 1, len(szWin$))
  836.         IF szWin$ = szSys$ THEN
  837.             IsWindowsShared = 0
  838.         ELSE
  839.             IsWindowsShared = 1
  840.         END IF
  841.     END IF
  842. END FUNCTION
  843.  
  844. FUNCTION GetScreenWidth STATIC AS INTEGER
  845.     GetScreenWidth = GetSystemMetrics(SM_CXSCREEN)
  846. END FUNCTION
  847.  
  848. FUNCTION GetScreenHeight STATIC AS INTEGER
  849.     GetScreenHeight = GetSystemMetrics(SM_CYSCREEN)
  850. END FUNCTION
  851.  
  852. SUB SetRestartDir (szDir$) STATIC
  853.     IF FSetRestartDir(szDir$) = 0 THEN
  854.         ERROR STFERR
  855.     END IF
  856. END SUB
  857.  
  858.  
  859. FUNCTION RestartListEmpty STATIC AS INTEGER
  860.     IF FRestartListEmpty() = 0 THEN
  861.         RestartListEmpty = 0
  862.     ELSE
  863.         RestartListEmpty = 1
  864.     END IF
  865. END FUNCTION
  866.  
  867. FUNCTION ExitExecRestart STATIC AS INTEGER
  868.     ExitExecRestart = FExitExecRestart
  869. END FUNCTION
  870.  
  871. SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%) STATIC
  872.     IF FPrependToPath (szSrc$, szDst$, szDir$, cmo%) = 0 THEN
  873.         ERROR STFERR
  874.     END IF
  875. END SUB
  876.  
  877. TRAP CleanupTrap From "MSSHLSTF.DLL"
  878.  
  879. End Trap
  880.  
  881. hSetup = InitSetup(COMMAND$)
  882.  
  883. ON ERROR GOTO QUIT
  884.  
  885. ''***************************************************************************
  886. ''                                        MSREGDB.INC
  887. ''***************************************************************************
  888.  
  889. '$DEFINE REG_DB_ENABLED
  890.  
  891. const REG_SZ               = 1
  892. const HKEY_CLASSES_ROOT    = 1
  893. const ERROR_SUCCESS        = 0
  894.  
  895.  
  896. DECLARE FUNCTION EercErrorHandler LIB "mscomstf.dll" (grc%, fVital%, sz1$, sz2$, sz3$) AS INTEGER
  897. CONST GRC_API_FAILED       = 104
  898.  
  899. DECLARE FUNCTION RegOpenKey LIB "SHELL.DLL" (hKey&, szSubKey$, phkResult AS POINTER TO LONG) AS LONG
  900. DECLARE FUNCTION RegCreateKey LIB "shell.dll" (hKey&, szSubKey$, phkResult AS POINTER TO LONG) AS LONG
  901. DECLARE FUNCTION RegDeleteKey LIB "shell.dll" (hKey&, szSubKey$) AS LONG
  902. DECLARE FUNCTION RegCloseKey LIB "shell.dll" (hKey&) AS LONG
  903. DECLARE FUNCTION RegQueryValue LIB "shell.dll" (hKey&, szSubKey$, szValue$, lpcb AS POINTER TO LONG) AS LONG
  904. DECLARE FUNCTION RegSetValue LIB "shell.dll" (hKey&, szSubKey$, dwType&, szValue$, cbValue&) AS LONG
  905. DECLARE FUNCTION RegEnumKey LIB "shell.dll" (HkEY&, dwIndex&, szBuffer$, dwBufferSize&) AS LONG
  906.  
  907.  
  908. DECLARE SUB CreateRegKey(szKey$)
  909. DECLARE SUB CreateRegKeyValue(szKey$, szValue$)
  910. DECLARE SUB SetRegKeyValue(szKey$, szValue$)
  911. DECLARE SUB DeleteRegKey(szKey$)
  912. DECLARE FUNCTION GetRegKeyValue(szKey$) AS STRING
  913. DECLARE FUNCTION DoesRegKeyExist(szKey$) AS INTEGER
  914.  
  915. SUB CreateRegKey(szKey$) STATIC
  916.     DIM phKey AS LONG
  917.  
  918.     IF RegCreateKey(HKEY_CLASSES_ROOT, szKey$, VARPTR(phKey)) > ERROR_SUCCESS THEN
  919.         i% = EercErrorHandler(GRC_API_FAILED, 1, "CreateRegKey", NULL, NULL)
  920.         ERROR STFERR
  921.     END IF
  922.  
  923.     IF RegCloseKey(phKey) > ERROR_SUCCESS THEN
  924.         i% = EercErrorHandler(GRC_API_FAILED, 1, "CreateRegKey", NULL, NULL)
  925.         ERROR STFERR
  926.     END IF
  927. END SUB
  928.  
  929. SUB CreateRegKeyValue(szKey$, szValue$) STATIC
  930.     DIM phKey AS LONG
  931.  
  932.     IF RegSetValue(HKEY_CLASSES_ROOT, szKey$, REG_SZ,  szValue$, len(szKey$)) > ERROR_SUCCESS THEN
  933.         i% = EercErrorHandler(GRC_API_FAILED, 1, "CreateRegKeyValue", NULL, NULL)
  934.         ERROR STFERR
  935.     END IF
  936. END SUB
  937.  
  938. FUNCTION DoesRegKeyExist(szKey$) STATIC AS INTEGER
  939.     DIM phKey AS LONG
  940.  
  941.     IF RegOpenKey(HKEY_CLASSES_ROOT, szKey$, VARPTR(phKey)) = ERROR_SUCCESS THEN
  942.         i = RegCloseKey(phKey)
  943.         DoesRegKeyExist = 1
  944.     ELSE
  945.         DoesRegKeyExist = 0
  946.     ENDIF
  947. END FUNCTION
  948.  
  949.  
  950. SUB SetRegKeyValue(szKey$, szValue$) STATIC
  951.     DIM phKey AS LONG
  952.  
  953.     IF RegSetValue(HKEY_CLASSES_ROOT, szKey$, REG_SZ,  szValue$, len(szKey$)) > ERROR_SUCCESS THEN
  954.         i% = EercErrorHandler(GRC_API_FAILED, 1, "SetRegKeyValue", NULL, NULL)
  955.         ERROR STFERR
  956.     END IF
  957. END SUB
  958.  
  959.  
  960. FUNCTION GetRegKeyValue(szKey$) STATIC AS STRING
  961.     szValue$ = string$(512,32)
  962.     cb& = len(szValue$)
  963.  
  964.     IF DoesRegKeyExist(szKey$) = 0 THEN
  965.         GetRegKeyValue = ""
  966.         EXIT FUNCTION
  967.     END IF
  968.  
  969.     IF RegQueryValue(HKEY_CLASSES_ROOT, szKey$, szValue$, VARPTR(cb)) = ERROR_SUCCESS THEN
  970.         GetRegKeyValue = MID$(szValue$, 1, cb)
  971.     ELSE
  972.         i% = EercErrorHandler(GRC_API_FAILED, 1, "SetRegKeyValue", NULL, NULL)
  973.         ERROR STFERR
  974.     END IF
  975.     szValue$ = ""
  976. END FUNCTION
  977.  
  978.  
  979. SUB DeleteRegKey(szKey$) STATIC
  980.     i& = RegDeleteKey(HKEY_CLASSES_ROOT, szKey$)
  981. END SUB
  982.  
  983. ''***************************************************************************
  984. ''                                        MSCPYDIS.INC
  985. ''***************************************************************************
  986.  
  987. DECLARE FUNCTION FInitSystem1 LIB "mscpydis.dll" (did%, sz$, fNet%) AS INTEGER
  988. DECLARE FUNCTION FInitSystem3 LIB "mscpydis.dll" (did%, sz$, fAlways%) AS INTEGER
  989. DECLARE FUNCTION FCloseSystem LIB "mscpydis.dll" (szSect$, szKey$, szDst$, wResType%, wResId%) AS INTEGER
  990.  
  991. DECLARE FUNCTION InitSystemRead  (did%, sz$, fNet%) AS INTEGER
  992. DECLARE FUNCTION InitSystemWrite (did%, sz$, fAlways%) AS INTEGER
  993. DECLARE SUB CloseSystem (szSect$, szKey$, szDst$, wResType%, wResId%)
  994.  
  995. FUNCTION InitSystemRead (did%, sz$, fNet%) STATIC AS INTEGER
  996.     InitSystemRead = FInitSystem1(did%, sz$, fNet%)
  997. END FUNCTION
  998.  
  999. FUNCTION InitSystemWrite (did%, sz$, fAlways%) STATIC AS INTEGER
  1000.     InitSystemWrite = FInitSystem3(did%, sz$, fAlways%)
  1001. END FUNCTION
  1002.  
  1003. SUB CloseSystem (szSect$, szKey$, szDst$, wResType%, wResId%) STATIC
  1004.     IF FCloseSystem (szSect$, szKey$, szDst$, wResType%, wResId%) = 0 THEN
  1005.         ERROR STFERR
  1006.     END IF
  1007. END SUB
  1008.  
  1009. ''***************************************************************************
  1010. ''                                        MSDETECT.INC
  1011. ''***************************************************************************
  1012.  
  1013. DECLARE FUNCTION CbGetVersionOfFile LIB "msdetstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  1014. DECLARE FUNCTION LGetVersionNthField LIB "msdetstf.dll" (szVersion$, nField%) AS LONG
  1015. DECLARE FUNCTION LcbGetSizeOfFile LIB "msdetstf.dll" (szFile$) AS LONG
  1016. DECLARE FUNCTION FGetValidDrivesList LIB "msdetstf.dll" (szSymbol$) AS INTEGER
  1017. DECLARE FUNCTION FGetLocalHardDrivesList LIB "msdetstf.dll" (szSymbol$) AS INTEGER
  1018. DECLARE FUNCTION FGetRemovableDrivesList LIB "msdetstf.dll" (szSymbol$) AS INTEGER
  1019. DECLARE FUNCTION FGetNetworkDrivesList LIB "msdetstf.dll" (szSymbol$) AS INTEGER
  1020. DECLARE FUNCTION LcbTotalDrive LIB "msdetstf.dll" (nDrive%) AS LONG
  1021. DECLARE FUNCTION LcbFreeDrive LIB "msdetstf.dll" (nDrive%) AS LONG
  1022. DECLARE FUNCTION FIsValidDrive LIB "msdetstf.dll" (nDrive%) AS INTEGER
  1023. DECLARE FUNCTION FIsLocalHardDrive LIB "msdetstf.dll" (nDrive%) AS INTEGER
  1024. DECLARE FUNCTION FIsRemoveDrive LIB "msdetstf.dll" (nDrive%) AS INTEGER
  1025. DECLARE FUNCTION FIsRemoteDrive LIB "msdetstf.dll" (nDrive%) AS INTEGER
  1026. DECLARE FUNCTION FDirExists LIB "msdetstf.dll" (szDir$) AS INTEGER
  1027. DECLARE FUNCTION FDoesFileExist LIB "msdetstf.dll" (szFileName$, mode%) AS INTEGER
  1028. DECLARE FUNCTION CbGetDateOfFile LIB "msdetstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  1029. DECLARE FUNCTION FDoesIniSectionExist LIB "msdetstf.dll" (szFile$, szSect$) AS INTEGER
  1030. DECLARE FUNCTION FDoesIniKeyExist LIB "msdetstf.dll" (szFile$, szSect$, szKey$) AS INTEGER
  1031. DECLARE FUNCTION CbGetIniKeyString LIB "msdetstf.dll" (szFile$, szSect$, szKey$, szBuf$, cbBuf%) AS INTEGER
  1032. DECLARE FUNCTION WGetDOSMajorVersion LIB "msdetstf.dll" AS INTEGER
  1033. DECLARE FUNCTION WGetDOSMinorVersion LIB "msdetstf.dll" AS INTEGER
  1034. DECLARE FUNCTION CbGetEnvVariableValue LIB "msdetstf.dll" (szEnvVar$, szBuf$, cbBuf%) AS INTEGER
  1035. DECLARE FUNCTION WGetNumWinApps LIB "msdetstf.dll" AS INTEGER
  1036. DECLARE FUNCTION FGetParallelPortsList LIB "msdetstf.dll" (szSymbol$) AS INTEGER
  1037. DECLARE FUNCTION FGetSerialPortsList LIB "msdetstf.dll" (szSymbol$) AS INTEGER
  1038. DECLARE FUNCTION FHas87MathChip LIB "msdetstf.dll" AS INTEGER
  1039. DECLARE FUNCTION FHasMonochromeDisplay LIB "msdetstf.dll" AS INTEGER
  1040. DECLARE FUNCTION FHasMouseInstalled LIB "msdetstf.dll" AS INTEGER
  1041. DECLARE FUNCTION WGetConfigSmartdrvSize LIB "msdetstf.dll" AS INTEGER
  1042. DECLARE FUNCTION WGetConfigRamdriveSize LIB "msdetstf.dll" AS INTEGER
  1043. DECLARE FUNCTION WGetConfigNumBuffers LIB "msdetstf.dll" AS INTEGER
  1044. DECLARE FUNCTION WGetConfigNumFiles LIB "msdetstf.dll" AS INTEGER
  1045. DECLARE FUNCTION WGetConfigLastDrive LIB "msdetstf.dll" AS INTEGER
  1046. DECLARE FUNCTION FIsDriverInConfig LIB "msdetstf.dll" (szDrv$) AS INTEGER
  1047. DECLARE FUNCTION CbFindTargetOnEnvVar LIB "msdetstf.dll" (szFile$, szEnvVar$, szBuf$, cbBuf%) AS INTEGER
  1048. DECLARE FUNCTION CbFindFileInTree LIB "msdetstf.dll" (szFile$, szDir$, szBuf$, cbBuf%) AS INTEGER
  1049. DECLARE FUNCTION GetTypeFaceNameFromTTF LIB "msdetstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  1050. DECLARE FUNCTION GetExistingFOTFileForTTF LIB "msdetstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  1051.  
  1052. DECLARE FUNCTION IsDriveValid (szDrive$) AS INTEGER
  1053. DECLARE FUNCTION IsDriveLocalHard (szDrive$) AS INTEGER
  1054. DECLARE FUNCTION IsDriveRemovable (szDrive$) AS INTEGER
  1055. DECLARE FUNCTION IsDriveNetwork (szDrive$) AS INTEGER
  1056. DECLARE SUB GetValidDrivesList (szSymbol$)
  1057. DECLARE SUB GetLocalHardDrivesList (szSymbol$)
  1058. DECLARE SUB GetRemovableDrivesList (szSymbol$)
  1059. DECLARE SUB GetNetworkDrivesList (szSymbol$)
  1060. DECLARE FUNCTION GetTotalSpaceForDrive (szDrive$) AS LONG
  1061. DECLARE FUNCTION GetFreeSpaceForDrive (szDrive$) AS LONG
  1062.  
  1063. DECLARE FUNCTION GetDOSMajorVersion AS INTEGER
  1064. DECLARE FUNCTION GetDOSMinorVersion AS INTEGER
  1065. DECLARE FUNCTION GetEnvVariableValue (szEnvVar$) AS STRING
  1066. DECLARE FUNCTION GetNumWinApps AS INTEGER
  1067.  
  1068. DECLARE FUNCTION DoesFileExist (szFile$, mode%) AS INTEGER
  1069. DECLARE FUNCTION GetDateOfFile (szFile$) AS STRING
  1070. DECLARE FUNCTION GetYearFromDate (szDate$) AS INTEGER
  1071. DECLARE FUNCTION GetMonthFromDate (szDate$) AS INTEGER
  1072. DECLARE FUNCTION GetDayFromDate (szDate$) AS INTEGER
  1073. DECLARE FUNCTION GetHourFromDate (szDate$) AS INTEGER
  1074. DECLARE FUNCTION GetMinuteFromDate (szDate$) AS INTEGER
  1075. DECLARE FUNCTION GetSecondFromDate (szDate$) AS INTEGER
  1076. DECLARE FUNCTION GetVersionOfFile (szFile$) AS STRING
  1077. DECLARE FUNCTION GetVersionNthField (szVersion$, nField%) AS LONG
  1078. DECLARE FUNCTION GetSizeOfFile (szFile$) AS LONG
  1079. DECLARE FUNCTION FindTargetOnEnvVar (szFile$, szEnvVar$) AS STRING
  1080. DECLARE FUNCTION FindFileInTree (szFile$, szDir$) AS STRING
  1081. DECLARE FUNCTION DoesDirExist (szDir$) AS INTEGER
  1082.  
  1083. DECLARE FUNCTION DoesIniSectionExist (szFile$, szSect$) AS INTEGER
  1084. DECLARE FUNCTION DoesIniKeyExist (szFile$, szSect$, szKey$) AS INTEGER
  1085. DECLARE FUNCTION GetIniKeyString (szFile$, szSect$, szKey$) AS STRING
  1086.  
  1087. DECLARE FUNCTION GetConfigSmartdrvSize AS INTEGER
  1088. DECLARE FUNCTION GetConfigRamdriveSize AS INTEGER
  1089. DECLARE FUNCTION GetConfigNumBuffers AS INTEGER
  1090. DECLARE FUNCTION GetConfigNumFiles AS INTEGER
  1091. DECLARE FUNCTION GetConfigLastDrive AS STRING
  1092. DECLARE FUNCTION IsDriverInConfig (szDrv$) AS INTEGER
  1093.  
  1094. DECLARE FUNCTION GetProcessorType AS INTEGER
  1095. DECLARE SUB GetParallelPortsList (szSymbol$)
  1096. DECLARE SUB GetSerialPortsList (szSymbol$)
  1097. DECLARE FUNCTION Has87MathChip AS INTEGER
  1098. DECLARE FUNCTION HasMonochromeDisplay AS INTEGER
  1099. DECLARE FUNCTION HasMouseInstalled AS INTEGER
  1100.  
  1101.  
  1102. FUNCTION IsDriveValid (szDrive$) STATIC  AS INTEGER
  1103.     IsDriveValid = FIsValidDrive(ASC(UCASE$(szDrive$)) - ASC("A") + 1)
  1104. END FUNCTION
  1105.  
  1106. FUNCTION IsDriveLocalHard (szDrive$) STATIC  AS INTEGER
  1107.     IsDriveLocalHard = FIsLocalHardDrive(ASC(UCASE$(szDrive$)) - ASC("A") + 1)
  1108. END FUNCTION
  1109.  
  1110. FUNCTION IsDriveRemovable (szDrive$) STATIC  AS INTEGER
  1111.     IsDriveRemovable = FIsRemoveDrive(ASC(UCASE$(szDrive$)) - ASC("A") + 1)
  1112. END FUNCTION
  1113.  
  1114. FUNCTION IsDriveNetwork (szDrive$) STATIC  AS INTEGER
  1115.     IsDriveNetwork = FIsRemoteDrive(ASC(UCASE$(szDrive$)) - ASC("A") + 1)
  1116. END FUNCTION
  1117.  
  1118. FUNCTION GetTotalSpaceForDrive (szDrive$) STATIC  AS LONG
  1119.     GetTotalSpaceForDrive = LcbTotalDrive(ASC(UCASE$(szDrive$)) - ASC("A") + 1)
  1120. END FUNCTION
  1121.  
  1122. FUNCTION GetFreeSpaceForDrive (szDrive$) STATIC  AS LONG
  1123.     GetFreeSpaceForDrive = LcbFreeDrive(ASC(UCASE$(szDrive$)) - ASC("A") + 1)
  1124. END FUNCTION
  1125.  
  1126. SUB GetValidDrivesList (szSymbol$) STATIC
  1127.     if FGetValidDrivesList(szSymbol$) = 0 then
  1128.         ERROR STFERR
  1129.     end if
  1130. END SUB
  1131.  
  1132. SUB GetLocalHardDrivesList (szSymbol$) STATIC
  1133.     if FGetLocalHardDrivesList(szSymbol$) = 0 then
  1134.         ERROR STFERR
  1135.     end if
  1136. END SUB
  1137.  
  1138. SUB GetRemovableDrivesList (szSymbol$) STATIC
  1139.     if FGetRemovableDrivesList(szSymbol$) = 0 then
  1140.         ERROR STFERR
  1141.     end if
  1142. END SUB
  1143.  
  1144. SUB GetNetworkDrivesList (szSymbol$) STATIC
  1145.     if FGetNetworkDrivesList(szSymbol$) = 0 then
  1146.         ERROR STFERR
  1147.     end if
  1148. END SUB
  1149.  
  1150. FUNCTION GetDOSMajorVersion STATIC  AS INTEGER
  1151.     GetDOSMajorVersion = WGetDOSMajorVersion
  1152. END FUNCTION
  1153.  
  1154. FUNCTION GetDOSMinorVersion STATIC  AS INTEGER
  1155.     GetDOSMinorVersion = WGetDOSMinorVersion
  1156. END FUNCTION
  1157.  
  1158. FUNCTION GetEnvVariableValue (szEnvVar$) STATIC  AS STRING
  1159.     cb% = 1024
  1160.     szBuf$ = STRING$(cb%, 32)
  1161.     cbRet% = CbGetEnvVariableValue(szEnvVar$, szBuf$, cb%)
  1162.     GetEnvVariableValue = szBuf$
  1163.     szBuf$ = ""
  1164. END FUNCTION
  1165.  
  1166. FUNCTION GetNumWinApps STATIC  AS INTEGER
  1167.     GetNumWinApps = WGetNumWinApps
  1168. END FUNCTION
  1169.  
  1170. FUNCTION DoesFileExist (szFileName$, mode%) STATIC  AS INTEGER
  1171.     DoesFileExist = FDoesFileExist(szFileName$, mode%)
  1172. END FUNCTION
  1173.  
  1174. FUNCTION GetDateOfFile (szFile$) STATIC  AS STRING
  1175.     cb% = 20
  1176.     szBuf$ = STRING$(cb%, 32)
  1177.     cbRet% = CbGetDateOfFile(szFile$, szBuf$, cb%)
  1178.     GetDateOfFile = szBuf$
  1179.     szBuf$ = ""
  1180. END FUNCTION
  1181.  
  1182. FUNCTION GetYearFromDate (szDate$) STATIC  AS INTEGER
  1183.     GetYearFromDate = VAL(MID$(szDate$, 1, 4))
  1184. END FUNCTION
  1185.  
  1186. FUNCTION GetMonthFromDate (szDate$) STATIC  AS INTEGER
  1187.     GetMonthFromDate = VAL(MID$(szDate$, 6, 2))
  1188. END FUNCTION
  1189.  
  1190. FUNCTION GetDayFromDate (szDate$) STATIC  AS INTEGER
  1191.     GetDayFromDate = VAL(MID$(szDate$, 9, 2))
  1192. END FUNCTION
  1193.  
  1194. FUNCTION GetHourFromDate (szDate$) STATIC  AS INTEGER
  1195.     GetHourFromDate = VAL(MID$(szDate$, 12, 2))
  1196. END FUNCTION
  1197.  
  1198. FUNCTION GetMinuteFromDate (szDate$) STATIC  AS INTEGER
  1199.     GetMinuteFromDate = VAL(MID$(szDate$, 15, 2))
  1200. END FUNCTION
  1201.  
  1202. FUNCTION GetSecondFromDate (szDate$) STATIC  AS INTEGER
  1203.     GetSecondFromDate = VAL(MID$(szDate$, 18, 2))
  1204. END FUNCTION
  1205.  
  1206. FUNCTION GetVersionOfFile (szFile$) STATIC  AS STRING
  1207.     cb% = 30
  1208.     szBuf$ = STRING$(cb%, 32)
  1209.     cbRet% = CbGetVersionOfFile(szFile$, szBuf$, cb%)
  1210.     GetVersionOfFile = szBuf$
  1211.     szBuf$ = ""
  1212. END FUNCTION
  1213.  
  1214. FUNCTION GetVersionNthField (szVersion$, nField%) STATIC  AS LONG
  1215.     GetVersionNthField = LGetVersionNthField(szVersion$, nField%)
  1216. END FUNCTION
  1217.  
  1218. FUNCTION GetSizeOfFile (szFile$) STATIC  AS LONG
  1219.     GetSizeOfFile = LcbGetSizeOfFile(szFile$)
  1220. END FUNCTION
  1221.  
  1222. FUNCTION FindTargetOnEnvVar (szFile$, szEnvVar$) STATIC  AS STRING
  1223.     cb% = 512
  1224.     szBuf$ = STRING$(cb%, 32)
  1225.     cbRet% = CbFindTargetOnEnvVar(szFile$, szEnvVar$, szBuf$, cb%)
  1226.     IF cbRet% >= cb% THEN
  1227.         ERROR STFERR
  1228.     END IF
  1229.     szBuf$ = RTRIM$(szBuf$)
  1230.     IF MID$(szBuf$, 1, 1) = "\" THEN
  1231.        szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1232.     ELSEIF Len(szBuf$) > 0 AND MID$(szBuf$, 2, 1) <> ":" THEN
  1233.        szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  1234.     END IF
  1235.     FindTargetOnEnvVar = szBuf$
  1236.     szBuf$ = ""
  1237. END FUNCTION
  1238.  
  1239. FUNCTION FindFileInTree (szFile$, szDir$) STATIC  AS STRING
  1240.     cb% = 512
  1241.     szBuf$ = STRING$(cb%, 32)
  1242.     cbRet% = CbFindFileInTree(szFile$, szDir$, szBuf$, cb%)
  1243.     FindFileInTree = szBuf$
  1244.     szBuf$ = ""
  1245. END FUNCTION
  1246.  
  1247. FUNCTION GetConfigSmartdrvSize STATIC  AS INTEGER
  1248.     GetConfigSmartdrvSize = WGetConfigSmartdrvSize
  1249. END FUNCTION
  1250.  
  1251. FUNCTION GetConfigRamdriveSize STATIC  AS INTEGER
  1252.     GetConfigRamdriveSize = WGetConfigRamdriveSize
  1253. END FUNCTION
  1254.  
  1255. FUNCTION GetConfigNumBuffers STATIC  AS INTEGER
  1256.     GetConfigNumBuffers = WGetConfigNumBuffers
  1257. END FUNCTION
  1258.  
  1259.  
  1260. FUNCTION GetConfigNumFiles STATIC  AS INTEGER
  1261.     GetConfigNumFiles = WGetConfigNumFiles
  1262. END FUNCTION
  1263.  
  1264. FUNCTION GetConfigLastDrive STATIC  AS STRING
  1265.     chRet% = WGetConfigLastDrive
  1266.     if chRet% = 0 then
  1267.         GetConfigLastDrive = ""
  1268.     else
  1269.         GetConfigLastDrive = CHR$(chRet%)
  1270.     end if
  1271. END FUNCTION
  1272.  
  1273. FUNCTION IsDriverInConfig (szDrv$) STATIC  AS INTEGER
  1274.     IsDriverInConfig = FIsDriverInConfig(szDrv$)
  1275. END FUNCTION
  1276.  
  1277. FUNCTION GetProcessorType STATIC  AS INTEGER
  1278.     GetProcessorType = 0
  1279.     longTmp& = GetWinFlags()
  1280.     IF longTmp& AND WF_CPU486 THEN
  1281.         GetProcessorType = 4
  1282.     ELSEIF longTmp& AND WF_CPU386 THEN
  1283.         GetProcessorType = 3
  1284.     ELSEIF longTmp& AND WF_CPU286 THEN
  1285.         GetProcessorType = 2
  1286.     ELSEIF longTmp& AND WF_CPU186 THEN
  1287.         GetProcessorType = 1
  1288.     END IF
  1289. END FUNCTION
  1290.  
  1291. SUB GetParallelPortsList (szSymbol$) STATIC
  1292.     if FGetParallelPortsList(szSymbol$) = 0 then
  1293.         ERROR STFERR
  1294.     end if
  1295. END SUB
  1296.  
  1297. SUB GetSerialPortsList (szSymbol$) STATIC
  1298.     if FGetSerialPortsList(szSymbol$) = 0 then
  1299.         ERROR STFERR
  1300.     end if
  1301. END SUB
  1302.  
  1303. FUNCTION Has87MathChip STATIC  AS INTEGER
  1304.     Has87MathChip = FHas87MathChip
  1305. END FUNCTION
  1306.  
  1307. FUNCTION HasMonochromeDisplay STATIC  AS INTEGER
  1308.     HasMonochromeDisplay = FHasMonochromeDisplay
  1309. END FUNCTION
  1310.  
  1311. FUNCTION HasMouseInstalled STATIC  AS INTEGER
  1312.     HasMouseInstalled = FHasMouseInstalled
  1313. END FUNCTION
  1314.  
  1315. FUNCTION DoesDirExist (szDir$) STATIC  AS INTEGER
  1316.     DoesDirExist = FDirExists(szDir$)
  1317. END FUNCTION
  1318.  
  1319. FUNCTION DoesIniSectionExist (szFile$, szSect$) STATIC  AS INTEGER
  1320.     DoesIniSectionExist = FDoesIniSectionExist(szFile$, szSect$)
  1321. END FUNCTION
  1322.  
  1323. FUNCTION DoesIniKeyExist (szFile$, szSect$, szKey$) STATIC  AS INTEGER
  1324.     DoesIniKeyExist = FDoesIniKeyExist(szFile$, szSect$, szKey$)
  1325. END FUNCTION
  1326.  
  1327. FUNCTION GetIniKeyString (szFile$, szSect$, szKey$) STATIC  AS STRING
  1328.     cb% = 512
  1329.     szBuf$ = STRING$(cb%, 32)
  1330.     cbRet% = CbGetIniKeyString(szFile$, szSect$, szKey$, szBuf$, cb%)
  1331.     GetIniKeyString = szBuf$
  1332.     szBuf$ = ""
  1333. END FUNCTION
  1334.  
  1335. ''***************************************************************************
  1336. ''                                        MSSHARED.INC
  1337. ''***************************************************************************
  1338.  
  1339. GLOBAL SharedFileNeedsCopying AS INTEGER
  1340.  
  1341. DECLARE FUNCTION WCompareVersion (szVer1$, szVer2$) AS INTEGER
  1342.  
  1343. DECLARE FUNCTION FindSharedFileFromPath (szField$, szVersion$) AS STRING
  1344.  
  1345. DECLARE FUNCTION SearchForLocationForSharedFile (szRegDbKey$, szWinIniSect$, szWinIniKey$, iWinIniField%, szDefault$, szVersion$) AS STRING
  1346.  
  1347.  
  1348. FUNCTION WCompareVersion (szVer1$, szVer2$) STATIC AS INTEGER
  1349.     IF szVer1$ = "" THEN
  1350.         IF szVer2$ = "" THEN
  1351.             WCompareVersion = 0
  1352.         ELSE
  1353.             WCompareVersion = -1
  1354.         END IF
  1355.     ELSEIF szVer2$ = "" THEN
  1356.         WCompareVersion = 1
  1357.     ELSE
  1358.         WCompareVersion = 0
  1359.         FOR i% = 1 TO 4 STEP 1
  1360.             piece1& = GetVersionNthField(szVer1$, i%)
  1361.             piece2& = GetVersionNthField(szVer2$, i%)
  1362.             IF piece1& > piece2& THEN
  1363.                 WCompareVersion = 1
  1364.                 GOTO _WCV_END
  1365.             ELSEIF piece1& < piece2& THEN
  1366.                 WCompareVersion = -1
  1367.                 GOTO _WCV_END
  1368.             END IF
  1369.         NEXT i%
  1370.     END IF
  1371. _WCV_END:
  1372. END FUNCTION
  1373.  
  1374. FUNCTION FindSharedFileFromPath(szField$, szVersion$) STATIC AS STRING
  1375.     FindSharedFileFromPath = ""
  1376.     SharedFileNeedsCopying = 0
  1377.     IF szField$ <> "" THEN
  1378.         IF DoesFileExist(szField$, OF_EXIST) = 0 THEN
  1379.             szFile$ = STRING$(32, 32)
  1380.  
  1381.             IF FParseFATPathIntoPieces(szField$, NULL, 0, NULL, 0, szFile$, 31) <> 0 THEN
  1382.                 szField$ = FindFileUsingFileOpen(szFile$)
  1383.             ELSE
  1384.                 szField$ = ""
  1385.             END IF
  1386.             szFile$ = ""
  1387.         END IF
  1388.  
  1389.         IF szField$ <> "" THEN
  1390.             IF WCompareVersion(GetVersionOfFile(szField$), szVersion$) >= 0 THEN
  1391.                 FindSharedFileFromPath = szField$
  1392.             ELSEIF IsFileWritable(szField$) <> 0 THEN
  1393.                 SharedFileNeedsCopying = 1
  1394.                 FindSharedFileFromPath = szField$
  1395.             END IF
  1396.  
  1397.             szField$ = ""
  1398.         END IF
  1399.     END IF
  1400. END FUNCTION
  1401.  
  1402.  
  1403. FUNCTION SearchForLocationForSharedFile (szRegDbKey$, szWinIniSect$, szWinIniKey$, iWinIniField%, szDefault$, szVersion$) STATIC AS STRING
  1404.  
  1405.     SearchForLocationForSharedFile = szDefault$
  1406.  
  1407. '$IFDEF    REG_DB_ENABLED
  1408.     IF szRegDbKey$ <> "" THEN
  1409.         szField$ = GetRegKeyValue(szRegDbKey$)
  1410.         szFile$ = FindSharedFileFromPath(szField$, szVersion$)
  1411.         IF szFile$ <> "" THEN
  1412.             SearchForLocationForSharedFile = szFile$
  1413.             szFile$ = ""
  1414.             GOTO _SFLSFS_END
  1415.         END IF
  1416.     END IF
  1417. '$ENDIF '' REG_DB_ENABLED
  1418.  
  1419.     IF szWinIniSect$ <> "" AND szWinIniKey$ <> "" THEN
  1420.         szWinIniLine$ = GetIniKeyString("WIN.INI", szWinIniSect$, szWinIniKey$)
  1421.         IF szWinIniLine$ <> "" THEN
  1422.             szField$ = GetNthFieldFromIniString(szWinIniLine$, iWinIniField%)
  1423.             szWinIniLine$ = ""
  1424.             szFile$ = FindSharedFileFromPath(szField$, szVersion$)
  1425.             IF szFile$ <> "" THEN
  1426.                 SearchForLocationForSharedFile = szFile$
  1427.                 szFile$ = ""
  1428.                 GOTO _SFLSFS_END
  1429.             END IF
  1430.         END IF
  1431.     END IF
  1432.  
  1433.     '' return value is still szDefault$ - assume it is writable
  1434.     SharedFileNeedsCopying = 1
  1435.     IF DoesFileExist(szDefault$, OF_EXIST) <> 0 THEN
  1436.         IF WCompareVersion(GetVersionOfFile(szDefault$), szVersion$) >= 0 THEN
  1437.             SharedFileNeedsCopying = 0
  1438.         END IF
  1439.     END IF
  1440.  
  1441. _SFLSFS_END:
  1442.  
  1443. END FUNCTION
  1444.  
  1445.  
  1446.